public class demo3 {
    private static class MyRunnable implements Runnable {
        @Override
        public void run() {
// 两种⽅法均可以
            while (!Thread.currentThread().interrupted()) {
                System.out.println("线程还没有结束");
//while (!Thread.currentThread().isInterrupted()) {
                System.out.println(Thread.currentThread().getName()
                        + ": 别管我，我忙着转账呢!");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    System.out.println(Thread.currentThread().getName()
                            + ": 有内⻤，终⽌交易！");
                    Thread.currentThread().interrupt();
                    // 注意此处的 break
                    //去掉break无法退出的原因是，Thread.sleep() 在被中断时会抛出 InterruptedException，
                    // 并且会清除线程的中断标志。
                    // 这样，isInterrupted() 在捕获异常后返回 false，导致循环不会按预期退出。
                    //手动恢复线程的中至状态，即第17行代码，就可以正常退出
                    //break;
                }
            }
            System.out.println("线程结束了");
            System.out.println(Thread.currentThread().getName()
                    + ": 啊！险些误了⼤事");
        }
    }
    public static void main(String[] args) throws InterruptedException {
        MyRunnable target = new MyRunnable();
        Thread thread = new Thread(target, "李四");
        System.out.println(Thread.currentThread().getName()
                + ": 让李四开始转账。");
        thread.start();
        Thread.sleep(5 * 1000);thread.interrupt();
        System.out.println(Thread.currentThread().getName()
                + ": ⽼板来电话了，得赶紧通知李四对⽅是个骗⼦！");

    }
}
